﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace Warehouse_Management
{
    public partial class frmCauHinh : DevExpress.XtraEditors.XtraForm
    {
        public frmCauHinh()
        {
            InitializeComponent();
        }

        private void frmCauHinh_Load(object sender, EventArgs e)
        {
            cbDatabaseSource.Text = Global.DATABASE_NAME;
            txtSa.Text = Global.USER;
            txtServer.Text = Global.SERVER_NAME;
            txtPass.Text = Global.PASS;
        }
        private void SetListTable()
        {
            if (Global.ListTableNameSource.Count > 0)
            {
                cbDatabaseSource.Items.Clear();
                cbDatabaseSource.Items.Add("(-Làm mới-)");

                foreach (string item in Global.ListTableNameSource)
                {
                    cbDatabaseSource.Items.Add(item);
                }

                cbDatabaseSource.Sorted = true;

                cbDatabaseSource.SelectedValue = Global.DATABASE_NAME;
            }
        }
        private void GetListTableSource(System.Windows.Forms.ComboBox comboBox)
        {
            try
            {
                Cursor = Cursors.WaitCursor;

                string strConnString = "server=" + txtServer.Text;
                strConnString += ";User Id=" + txtSa.Text + ";Password=" + txtPass.Text;

                //fServer = new SQLDMO.SQLServerClass();
                //fServer.Connect(txtServerName.Text, txtSa.Text, txtPass.Text);

                Global.InitializeServer(strConnString);

                comboBox.Items.Clear();
                comboBox.Items.Add("(-Làm mới-)");

                //foreach (SQLDMO.Database db in fServer.Databases)
                //{
                //    comboBox.Items.Add(db.Name);
                //}

                foreach (string dbName in Global.ListDatabases())
                {
                    comboBox.Items.Add(dbName);
                }

                comboBox.Sorted = true;

                comboBox.SelectedIndexChanged -= new EventHandler(cbDatabaseSource_SelectedIndexChanged);
                comboBox.SelectedIndex = 0;
                comboBox.SelectedIndexChanged += new EventHandler(cbDatabaseSource_SelectedIndexChanged);

            }
            catch (Exception e1)
            {
                MessageBox.Show("Kết nối không thành công. Bạn hãy kiểm tra lại thông tin cấu hình.\r\n\nChi tiết: " + e1.Message);
                //MessageBox.Show(e1.ToString(), gAppName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally { Cursor = Cursors.Default; }
        }

        private void cbDatabaseSource_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbDatabaseSource.SelectedIndex == 0)
            {
                GetListTableSource(cbDatabaseSource);
            }
        }
        private void cbDatabaseSource_DropDown(object sender, EventArgs e)
        {
            if (cbDatabaseSource.Items.Count <= 1)
                GetListTableSource(cbDatabaseSource);
        }
        private void cbDatabaseSource_Closed(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;

                if (cbDatabaseSource.SelectedIndex == 0)
                {
                    GetListTableSource(cbDatabaseSource);
                }

                Global.ListTableNameSource.Clear();
                for (int i = 1; i < cbDatabaseSource.Items.Count; i++)
                {
                    Global.ListTableNameSource.Add(cbDatabaseSource.Items[i].ToString());
                }

                Cursor = Cursors.Default;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
          
            if (cbDatabaseSource.Text == "")
            {
                errorProvider1.SetError(cbDatabaseSource, "\"Cơ sơ dữ liệu\" không được trống");
                return;
            }
            else
                errorProvider1.SetError(cbDatabaseSource, "");

            string st = "Server=" + txtServer.Text.Trim() + ";Database=" + cbDatabaseSource.Text.Trim() + ";Uid=" + txtSa.Text.Trim() + ";Pwd=" + txtPass.Text.Trim();
            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            config.ConnectionStrings.ConnectionStrings["MSSQL"].ConnectionString = st;
            //cấu hình WS
            SqlConnection con = new SqlConnection(st);
            try
            {
                con.Open();
            }
            catch (Exception ex)
            {
                con.Close();
               MessageBox.Show("Không kết nối được tới máy chủ này\r\nLý do: " + ex.Message);
                return;
            }
            string mssql = "Server=" + txtServer.Text.Trim() + "; Database=" + cbDatabaseSource.Text.Trim() + "; uid=" + txtSa.Text.Trim() + "; pwd=" + txtPass.Text.Trim();
            Global.SaveNodeXmlConnectionStrings(mssql);
            MessageBox.Show("Lưu cấu hình dữ liệu thành công, chương trình sẽ tự động restart");
            this.Close();
            Application.Restart();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Lưu cấu hình thất bại : " + ex.Message);
            }
        }
    }
}